perm filename POLFIT.F4[3,ALS] blob
sn#041472 filedate 1973-05-13 generic text, type T, neo UTF8
subroutine polfit(x,y,sigmay,npts,nterms,mode,a,chisqr)
implicit double precision (a-h,o-z)
dimension x(100),y(100),sigmay(100),a(10)
dimension sumx(19),sumy(10),array(10,10)
11 nmax=2*nterms-1
do 13 n=1,nmax
13 sumx(n)=0
do 15 j=1,nterms
15 sumy(j)=0.
chisq=0.
21 do 50 i=1,npts
xi=x(i)
yi=y(i)
31 if (mode) 32,37,39
32 if (yi) 35,37,33
33 weight=1./yi
go to 41
35 weight=1./(-yi)
goto 41
37 weight=1.
goto 41
39 weight=1./sigmay(i)**2
41 xterm=weight
do 44 n=1,nmax
sumx(n)=sumx(n)+xterm
44 xterm=xterm*xi
45 yterm=weight*yi
do 48 n=1,nterms
sumy(n)=sumy(n)+yterm
48 yterm=yterm*xi
49 chisq=chisq+weight*yi**2
50 continue
51 do 54 j=1,nterms
do 54 k=1,nterms
n=j+k-1
54 array(j,k)=sumx(n)
delta=determ(array,nterms)
if (delta) 61,57,61
57 chisqr=0.
do 59 j=1,nterms
59 a(j)=0.
goto 80
61 do 70 l=1,nterms
62 do 66 j=1,nterms
do 65 k=1,nterms
n=j+k-1
65 array(j,k)=sumx(n)
66 array(j,l)=sumy(j)
70 a(l)=determ(array,nterms)/delta
71 do 75 j=1,nterms
chisq=chisq-2.*a(j)*sumy(j)
do 75 k=1,nterms
n=j+k-1
75 chisq=chisq+a(j)*a(k)*sumx(n)
76 free=npts-nterms
77 chisqr=chisq/free
80 return
end